package controller

import (
	"notes/config"
	"notes/model"
	"notes/util"
	"strconv"

	"github.com/gin-gonic/gin"
)

// GetArticleByCid 获取一个栏目的文章
// @Summary 获取一个栏目的文章
// @Description 获取一个栏目的文章
// @Tags article
// @Produce json
// @Consume json
// @Accept json
// @Router /article/get [get]
// @Param cid query string false "栏目id"
// @Param ps query string false "每页显示数量"
// @Param pn query string false "当前页码"
// @Success 200 {object} util.JSONRET "成功返回token"
func GetArticleByCid(c *gin.Context) {
	cidStr := c.DefaultQuery("cid", "0")
	cid, _ := strconv.Atoi(cidStr)
	ps, _ := strconv.Atoi(c.DefaultQuery("ps", config.Conf.PageSize))
	pn, _ := strconv.Atoi(c.DefaultQuery("pn", "1"))
	insts, instsNum, err := model.GetCategoryArticle(cid, pn, ps)

	data := map[string]interface{}{
		"cid":     cid,
		"ps":      ps,
		"pn":      pn,
		"insts":   insts,
		"instNum": instsNum,
	}
	util.JSON(c, err, data)
}

// SearchArticle 搜索文章
// @Summary 搜索文章
// @Description 搜索文章
// @Tags article
// @Produce json
// @Consume json
// @Accept json
// @Router /article/search [get]
// @Param txt query string true "搜索词"
// @Success 200 {object} util.JSONRET "成功返回token"
func SearchArticle(c *gin.Context) {
	data := map[string]interface{}{
		"insts": model.SearchArticle(c.DefaultQuery("txt", "搜索")),
	}
	util.JSON(c, nil, data)
}

// AddArticle 添加文章
// @Summary 添加文章
// @Description 添加文章
// @Tags article
// @Produce json
// @Consume json
// @Accept json
// @Router /article/add [post]
// @Param _token query string true "token"
// @Param data body model.Article true "data"
// @Success 200 {object} util.JSONRET "成功返回token"
func AddArticle(c *gin.Context) {
	var data model.Article
	c.ShouldBind(&data)

	err := data.AddArticle()
	util.JSON(c, err, nil)
}

// DeleteArticle 删除文章
// @Summary 删除文章
// @Description 删除文章
// @Tags article
// @Produce json
// @Consume json
// @Accept json
// @Router /article/delete [get]
// @Param _token query string true "token"
// @Param id query string true "id"
// @Success 200 {object} util.JSONRET "成功返回token"
func DeleteArticle(c *gin.Context) {
	id, _ := strconv.Atoi(c.DefaultQuery("id", "0"))
	err := model.DeleteArticle(id)
	util.JSON(c, err, nil)
}

// FindArticle 获取一个文章的详情
// @Summary 获取一个文章的详情
// @Description 获取一个文章的详情
// @Tags article
// @Produce json
// @Consume json
// @Accept json
// @Router /article/find [get]
// @Param _token query string true "token"
// @Param id query string true "id"
// @Success 200 {object} util.JSONRET "成功返回token"
func FindArticle(c *gin.Context) {
	id, _ := strconv.Atoi(c.DefaultQuery("id", "0"))
	inst, err := model.FindArticle(id)
	data := map[string]interface{}{
		"inst": inst,
	}
	util.JSON(c, err, data)
}

// UpdateArticle 更新文章
// @Summary 更新文章
// @Description 更新文章
// @Tags article
// @Produce json
// @Consume json
// @Accept json
// @Router /article/update [post]
// @Param _token query string true "token"
// @Param data body model.Article true "data"
// @Success 200 {object} util.JSONRET "成功返回token"
func UpdateArticle(c *gin.Context) {
	var data model.Article
	c.ShouldBindJSON(&data)
	err := data.Update()

	util.JSON(c, err, nil)
}

func ChangeArticleCategory(c *gin.Context) {
	id, _ := strconv.Atoi(c.DefaultQuery("id", "0"))
	cid, _ := strconv.Atoi(c.DefaultQuery("cid", "0"))
	err := model.UpdateArticleCategory(uint(id), uint(cid))
	util.JSON(c, err, nil)
	return
}
